const client = require('@/db/redis')
// const logger = require('@/utils/logger') // 确保引入logger

module.exports = {
    // 无需创建消费组
    // 使用 List 实现可靠队列
    consumeMessages: async (queueName, processor) => {
        const processingQueue = `${queueName}:processing` // 处理中队列

        while (true) {
            try {
                // 原子操作：从主队列移到处理队列
                const message = await client.brpoplpush(
                    queueName,
                    processingQueue,
                    30
                ) // 30秒超时

                if (!message) continue // 超时后重试

                try {
                    await processor(message)
                    // 处理成功，从处理队列移除
                    await client.lrem(processingQueue, 1, message)
                } catch (error) {
                    console.log('消息处理失败', error)
                    // 处理失败，将消息移回主队列
                    await client.rpush(queueName, message)
                    await client.lrem(processingQueue, 1, message)
                }
            } catch (error) {
                console.log('队列消费异常', error)
                await new Promise((res) => setTimeout(res, 5000))
            }
        }
    },
}
